/*
 * Copyright 北京航空航天大学  @ 2015 版权所有
 */
package com.buaa.edu.employee.ali;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>定义魔方的数据结构</p>
 * @author towan
 * @email tongwenzide@163.com
 * @time 2015年8月23日
 */
public class Magic{
    
    /**
     * 魔方的阶数
     */
    int level;
    /**
     * 魔方的排列状态,<面,该面的矩阵排列>
     */
    private Map<MagicColorEnum,MagicColorEnum [][]>status;
    
    /**
     * 
     */
    public Magic() {
        super();
    }
    
    /**
     * @param level
     */
    public Magic(int level) {
        super();
        this.level = level;
        MagicColorEnum[] values = MagicColorEnum.values();
        //6面初始化
        int len = values.length;//面数
        status = new HashMap<MagicColorEnum, MagicColorEnum[][]>();
        for(int i=0;i<len;i++){
            MagicColorEnum ele = values[i];
            MagicColorEnum[][] plat = new MagicColorEnum[level][level];
            //初始化每一面
            for(int j=0;j<level;j++){
                for(int k=0;k<level;k++){
                    plat[j][k] = ele;
                }
            }
            status.put(ele, plat);
        }
    }

    
    /**
     * 根据操作进行旋转
     * @param opt
     * @author towan
     * 2015年8月23日
     */
    public void rotate(MagicOptEnum opt) {
        switch (opt) {
            case U:
                rotateUp();
                break;
            case D:
                
                break;
            case F:
                
                break;
            case B:
           
                break;
            case L:
                
                break;
            case R:
                
                break;

            default:
                break;
        }
    }
    /**
     * 上面旋转
     * @return
     * @author towan
     * 2015年8月24日
     */
    private void rotateUp() {
        //上面W90顺时针
        MagicColorEnum[][] magicColorEnums = status.get(MagicColorEnum.W);
        rotateClockwise(magicColorEnums);
//        status[0]
        
        //1-3正面到左侧面
        //1-3侧面到正面
        //1-3背面到侧面
        //1-3左侧面到背面
        
        //下面不变
    }

    /**
     * 90度旋转
     * @param magicColorEnums
     * @author towan
     * 2015年8月24日
     */
    public void rotateClockwise(MagicColorEnum[][] magicColorEnums) {
        //TODO
    }

    /**
     * 根据操作打印每面的状态
     * @param opts 操作
     * @author towan
     * 2015年8月23日
     */
    public  void rotate(MagicOptEnum ...opts){
        for(MagicOptEnum opt:opts){
            rotate(opt);
        }
    }
    /**
     * 魔方的打印
     * @author towan
     * 2015年8月24日
     */
    public void print(){
        Collection<MagicColorEnum[][]> values = status.values();
        for(MagicColorEnum[][] value:values){
            for(int j=0;j<level;j++){
                for(int k=0;k<level;k++){
                    System.out.print(value[j][k]);
                }
            }
            System.out.println();
        }
    }
}


